#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-04-19 11:47
# @Author : youngchaolin

print()

'''
内置函数 参考博文 https://www.cnblogs.com/jin-xin/articles/10858058.html
python提供了68个内置函数，使用频率高的函数，底层都是使用C语言编写，执行效率高
'''

# 博文里黄色的内置函数-了解即可
# 1 eval 剥去字符串的外衣，计算里面的代码，可能会被黑客利用，尽量不要使用，自己玩可以
s = '1+3'
print(eval(s))

s = '{"name":"messi"}'
# 字符串变字典
dic = eval(s)
print(dic, type(dic))

# 2 exec 与eval几乎一样，处理的是代码流，也是尽量不要用
msg = '''
for i in range(0,5):
    print(i)
'''
print(msg)
# 变成可执行了
exec(msg)

# 3 hash 获取一个对象的哈希值
print(hash('messi'))

# 4 help 打印获取这个对象的使用方法
print(help(str.upper))

# 5 callable 判断对象是否可以调用
s = 'abc'


def func():
    pass


print(callable(s))  # False 不可以调用
print(callable(func))  # True 可以调用

# 6 bin：将十进制转换成二进制并返回
print(bin(10), type(bin(10)))

# 7 oct：将十进制转化成八进制字符串并返回
print(oct(10), type(oct(8)))

# 8 hex：将十进制转化成十六进制字符串并返回
print(hex(10), type(hex(10)))

# 9 ord:输入字符找该字符编码的位置
print(ord('京'))

# 10 chr:输入位置数字找出其对应的字符
print(chr(20140))

# 11 int 将一个字符串或者数字转换成整形
print(int())
print(int('123'))
print(int(1.23))
# 2进制的1000，转换成10进制
print(int('1000', base=2))

# 12 float 将整数型和字符串转换为浮点数
print(float(123))
print(float('123'))

# 13 complex
# 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数
# 如果第一个参数为字符串，则不需要指定第二个参数
print(complex(1, 2))
print(complex('123'))

# 14 divmod 计算除数与被除数的结果，返回一个包含商和余数的元组(a // b, a % b)
print(divmod(10, 2))

# 15 round 保留浮点数的小数位数，默认保留整数
print(round(12.3))
print(round(1 / 3, 2))
print(round(3.2623456, 2))

# 16 pow：求x**y次幂。（三个参数为x**y的结果对z取余）
print(pow(2, 3))
print(pow(2, 3, 5))

# 17 byte 用于不同编码之间的转化
s = '京'
print(bytes(s, encoding='utf-8'))
print(bytes(s, encoding='gbk'))

# 18 repr 返回一个对象的string形式
name = 'messi'
print(repr(name))
print("{'name':'messi'}")
print(repr("{'name':'messi'}"))
# %r格式化输出
print('我叫%r'%('clyang')) #我叫'clyang'

# 19 all 可迭代对象中，全都是True才是True
print(all([1, 2, 3, '']))
print(all([1, 2, 3, True]))

# 20 any 可迭代对象中，有一个True 就是True
print(any([1, {}, 0, '']))
